package v1

import (
	"ginblog/model"
	"ginblog/utils/errormsg"
	"github.com/gin-gonic/gin"
	"net/http"
	"strconv"
)

// 添加文章
func AddArticle(c *gin.Context) {
	// 添加文章
	var data model.Article
	// 将该请求获取的值 根据json 传给对应的 data 中的字段
	_ = c.ShouldBindJSON(&data)
	// 返回success 则代表不存在 则可以创建
	code := model.CreateArt(&data)
	// 返回json格式的数据 gin.H是一个哈希表 返回对应的状态码 数据 和 提示
	c.JSON(http.StatusOK, gin.H{
		"status":  code,
		"data":    data,
		"message": errormsg.GetErrorMsg(code),
	})
}

// 查询分类下的所有文章
func GetCateArt(c *gin.Context) {
	// 分页查询 获取每页的数量和页数 还有id
	cid, _ := strconv.Atoi(c.Param("id"))
	pageSize, _ := strconv.Atoi(c.Query("pagesize"))
	pageNum, _ := strconv.Atoi(c.Query("pagenum"))
	// 如果是0 则不需分页限制 设置pageSize为-1
	switch {
	case pageSize >= 100:
		pageSize = 100
	case pageSize <= 0:
		pageSize = 10
	}
	// 如果是0 则不需分页限制 设置pageNum为-1
	if pageNum == 0 {
		pageNum = 1
	}
	// 得到对应的数据
	data, code, total := model.GetCateArt(cid, pageSize, pageNum)
	// 返回json格式的数据
	c.JSON(http.StatusOK, gin.H{
		"status":  code,
		"data":    data,
		"total" : total,
		"message": errormsg.GetErrorMsg(code),
	})
}

// 查询单个文章信息
func GetArtInfo(c *gin.Context) {
	id, _ := strconv.Atoi(c.Param("id"))
	data, code := model.GetArtInfo(id)
	c.JSON(http.StatusOK, gin.H{
		"status":    code,
		"data":    data,
		"message": errormsg.GetErrorMsg(code),
	})
}

// 查询文章列表
func GetArts(c *gin.Context) {
	// 分页查询 获取每页的数量和页数
	pageSize, _ := strconv.Atoi(c.Query("pagesize"))
	pageNum, _ := strconv.Atoi(c.Query("pagenum"))
	title := c.Query("title")
	// 如果是0 则不需分页限制 设置pageSize为-1
	switch {
	case pageSize >= 100:
		pageSize = 100
	case pageSize <= 0:
		pageSize = 10
	}
	// 如果是0 则不需分页限制 设置pageNum为-1
	if pageNum == 0 {
		pageNum = 1
	}
	if len(title) == 0 {
		data, code, total := model.GetArts(pageSize, pageNum)
		// 返回json格式的数据
		c.JSON(http.StatusOK, gin.H{
			"status":  code,
			"data":    data,
			"total":	total,
			"message": errormsg.GetErrorMsg(code),
		})
		return
	}
	// 得到对应的数据
	data, code, total := model.SearchArticle(title, pageSize, pageNum)
	// 返回json格式的数据
	c.JSON(http.StatusOK, gin.H{
		"status":  code,
		"data":    data,
		"total":	total,
		"message": errormsg.GetErrorMsg(code),
	})
}

// 编辑文章
func EditArt(c *gin.Context) {
	var data model.Article
	// 获取前端传过来的 id和user结构体
	id, _ := strconv.Atoi(c.Param("id"))
	_ = c.ShouldBindJSON(&data)
	code := model.EditArt(id, &data)

	c.JSON(http.StatusOK, gin.H{
		"status":  code,
		"message": errormsg.GetErrorMsg(code),
	})
}

// 删除文章
func DeleteArt(c *gin.Context) {
	id, _ := strconv.Atoi(c.Param("id"))
	code := model.DeleteArt(id)
	c.JSON(http.StatusOK, gin.H{
		"status":  code,
		"message": errormsg.GetErrorMsg(code),
	})
}
